package LimitedTimeGame.Day_0302;

/**
 * @author zxc
 * @date 2023/03/02 08:47
 **/

/**
 * 题目 ：二进制数转字符串
 * 题目详述 ：
 * 二进制数转字符串。给定一个介于0和1之间的实数（如0.72），类型为double，打印它的二进制表达式。
 * 如果该数字无法精确地用32位以内的二进制表示，则打印“ERROR”。
 *
 * 提示：
 * 32位包括输出中的 "0." 这两位。
 * 题目保证输入用例的小数位数最多只有 6 位
 *
 */
public class PrintBin {
    /**
     * 思路 ：
     * ===>
     * 即，由于所要打印的二进制数为 0 ~ 1区间之内的;
     * （1）即，对于该数乘以2之后，若是该数的整数位为1的话，则将其加入到字符串尾部;
     * （2）若是该数的整数位 在乘以2之后，整数位仍然为0的话，也将其加入到字符串尾部;
     * （3）while循环遍历，若是32位二进制数也未能够精确表示该 浮点数num的话，则直接报ERROR;
     *
     * @param num
     * @return
     */
    public String printBin(double num) {
        String result = "0.";
        while(num > 0 && result.length() <= 32){
            num *= 2;
            if(num >= 1){
                result += "1";
                num -= 1;
            }
            else {
                result += "0";
            }
        }
        System.out.println(result.length());
        return result.length() <= 32 ? result : "ERROR";
    }
}
